import { createRouter, createWebHashHistory } from 'vue-router';

import type { RouteRecordRaw } from 'vue-router';
import cacheUtils from '@/utils/local';

import { firstMenu } from '@/utils/map-route';

const routes: RouteRecordRaw[] = [
  {
    path: '/',
    redirect: '/main',
  },
  // {
  //   path: '/home',
  //   component: () => import('@/views/home/home.vue'),
  // },
  {
    path: '/login',
    name: 'login',
    component: () => import('@/views/login/login.vue'),
  },
  {
    path: '/main',
    // name 必须存在否则 router.addRoute('xxx', route)命中不到main组件
    name: 'main',
    component: () => import('@/views/main/main.vue'),
    // children: [],
  },
  {
    path: '/:pathMatch(.*)*',
    name: '404',
    component: () => import('@/views/404.vue'),
  },
];

const router = createRouter({
  routes,
  history: createWebHashHistory(),
});

// 白名单（无需token进去页面）
const whitePages = ['/login'];
router.beforeEach((to) => {
  // 如果跳转的不是白名单路径   业务页面
  if (!whitePages.includes(to.path)) {
    // 当token不存在  拦截到登陆界面
    if (!cacheUtils.getCache('token')) {
      return '/login';
      // 当是mian页面时 拦截到菜单的第一页面
      /**
       * 虽然没token的时候拦截到 / 但是router内自动拦截到 /main
       * 所以只需要对 /main 再进行拦截即可
       */
    } else if (to.path === '/main') {
      return firstMenu.url;
    }
  } else {
    // 如果前往login界面  当存在token时则拦截
    if (cacheUtils.getCache('token')) {
      return '/';
    }
  }

  // 获取到项目的全部路径
  // console.log(router.getRoutes());
});

export default router;
